//基于原生的express使用socket.io
var app = require("express")();
var server = require("http").Server(app);
var io = require('socket.io')(server);

// 配置静态资源路径
app.use(require('express').static('public'));

app.get("/",function(req,res){
    res.redirect('/index.html')

})

// 配置socketIO
// 记录当前用户数
let count = 0;
// 进入同一个聊天室的用户，保证用户唯一性
const users= [];
// 监听用户连接事件
io.on("connection",socket=>{
    // 监听前端的验证登入事件
    socket.on("login",data=>{
        // 1、判断用户是否已经进入当前聊天室，如果已经进入就不允许进入，如果在usrs中不存在该用户说明没有进入
        let user = users.find(item => item.userName===data.userName)
        if( user ){//用户已经存在
            socket.emit("loginError",{code:-1,msg:"您已经进入该聊天室，不能重复进入！",data:data})
        }else{//用户不存在
            // 将新进入的用户加入到users中去,当前用户数加一
            users.push(data)
            count++;
            // console.log("有用户连接上来了，当前用户数量是：",count,data)
            // 2、新用户进入成功，将用户信息传回客户端
            socket.emit("loginSuccess",{code:200,msg:data,users:users})
            // 3、新用户进入广播告诉所有用户
            io.emit("addUser",data)
            // 4、广播所有用户目前的人数
            io.emit("userCount",users)
            // 5、将当前用户消息存起来
            socket.userName = data.userName;
            socket.userSno = data.userSno;
            socket.userAvatar = data.userAvatar;


        }
    })
    // 6、监听用户断开连接的功能
    socket.on("disconnect",()=>{ 
        console.log("有用户断开连接了")
        //获取离开用户在users'中是索引值， 将离开的用户从users中删除,
        let idx = users.findIndex(item =>{
            // console.log("有hhhhh",socket.userName,item.userName)
            return item.userName==socket.userName;
        })
        // console.log(idx)
        idx>=0?users.splice(idx,1): false
        
        // 广播所有人谁离开了聊天室
        io.emit("delUser",{
            userName:socket.userName,
            userSno:socket.userSno,
            userAvatar:socket.userAvatar,
        })
        // 广播所有人当前在线用户数量已经改变
         io.emit("userCount",users)


        
    })


    // 7、监听用户发消息的事件
    socket.on("sendMassage",(data)=>{
        console.log("用户发来的信息是：",data)
        // 广播给所有用户
        io.emit("receiveMessage",data)

    })
    // 8、监听用户发图片的事件
    socket.on("sendImg",(data)=>{
        console.log("用户发来的图片消息是：",data)
        // 广播给所有用户
        io.emit("receiveImg",data)

    })
})


























// 监听端口启动服务
server.listen(3002,()=>{
    console.log('socketIO服务器启动成功，端口3002')
})